package com.rbac.admin.mapper.system;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rbac.admin.entity.system.SystemRole;
import com.rbac.admin.vo.system.RoleVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 角色Mapper接口
 *
 * @author rbac-admin
 * @since 2024-07-18
 */
@Mapper
@Repository
public interface RoleMapper extends BaseMapper<SystemRole> {

    /**
     * 根据用户ID查询角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<SystemRole> selectRolesByUserId(@Param("userId") String userId);

    /**
     * 根据角色编码查询角色
     *
     * @param roleCode 角色编码
     * @return 角色信息
     */
    SystemRole selectByRoleCode(@Param("roleCode") String roleCode);

    /**
     * 分页查询角色列表
     *
     * @param page 分页参数
     * @param role 查询条件
     * @return 角色列表
     */
    IPage<RoleVO> selectRolePage(Page<RoleVO> page, @Param("role") SystemRole role);

    /**
     * 查询角色详情
     *
     * @param roleId 角色ID
     * @return 角色详情
     */
    RoleVO selectRoleById(@Param("roleId") String roleId);

    /**
     * 查询所有正常状态的角色（用于下拉选择）
     *
     * @return 角色列表
     */
    List<RoleVO> selectAllActiveRoles();

    /**
     * 检查角色编码是否存在（排除指定角色ID）
     *
     * @param roleCode 角色编码
     * @param excludeRoleId 排除的角色ID
     * @return 存在数量
     */
    Integer checkRoleCodeExists(@Param("roleCode") String roleCode, @Param("excludeRoleId") String excludeRoleId);

    /**
     * 检查角色名称是否存在（排除指定角色ID）
     *
     * @param roleName 角色名称
     * @param excludeRoleId 排除的角色ID
     * @return 存在数量
     */
    Integer checkRoleNameExists(@Param("roleName") String roleName, @Param("excludeRoleId") String excludeRoleId);
}